//package com.demon.framework.boot.autoconfigure.app;
//
//import com.demon.framework.boot.convert.DateConvert;
//import com.fasterxml.jackson.databind.DeserializationFeature;
//import org.springframework.boot.autoconfigure.AutoConfigureAfter;
//import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
//import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
//import org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration;
//import org.springframework.context.annotation.Configuration;
//import org.springframework.http.MediaType;
//import org.springframework.http.converter.HttpMessageConverter;
//import org.springframework.http.converter.StringHttpMessageConverter;
//import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
//import org.springframework.web.servlet.config.annotation.EnableWebMvc;
//import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
//
//import javax.servlet.http.HttpServlet;
//import java.nio.charset.StandardCharsets;
//import java.util.ArrayList;
//import java.util.List;
//
///**
// * Spring MVC 相关配置
// *
// * @author Demon-HY
// * @date 2020-7-23
// */
//@Configuration
//@ConditionalOnWebApplication
//@AutoConfigureAfter(WebMvcAutoConfiguration.class)
//@ConditionalOnClass({HttpServlet.class})
//@EnableWebMvc
//public class MvcAutoConfiguration implements WebMvcConfigurer {
//
//    private final DateConvert customDateFormat;
//
//    public MvcAutoConfiguration(DateConvert customDateFormat) {
//        this.customDateFormat = customDateFormat;
//    }
//
//    /**
//     * 解决中文乱码及 json 数字long 类型 前端超过15位的 问题
//     */
//    @Override
//    public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
//        boolean hasJsonConverter = false;
//        boolean hasStringConverter = false;
//        for (HttpMessageConverter<?> converter : converters) {
//            if (converter instanceof MappingJackson2HttpMessageConverter) {
//                buildJackson2HttpMessageConverter((MappingJackson2HttpMessageConverter) converter);
//                hasJsonConverter = true;
//            } else if (converter instanceof StringHttpMessageConverter) {
//                buildStringHttpMessageConverter((StringHttpMessageConverter) converter);
//                hasStringConverter = true;
//            }
//        }
//        if (!hasJsonConverter) {
//            converters.add(buildJackson2HttpMessageConverter(new MappingJackson2HttpMessageConverter()));
//        }
//        if (!hasStringConverter) {
//            converters.add(buildStringHttpMessageConverter(new StringHttpMessageConverter()));
//        }
//    }
//
//    /**
//     * 解决 返回JSON 中文乱码
//     */
//    private MappingJackson2HttpMessageConverter buildJackson2HttpMessageConverter(
//            MappingJackson2HttpMessageConverter jsonConverter) {
//        // 设置全局日期格式化
//        jsonConverter.getObjectMapper().setDateFormat(customDateFormat);
//        jsonConverter.getObjectMapper().configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
//        // 数字也加引号
//        List<MediaType> mediaTypes = new ArrayList<>();
//        mediaTypes.add(MediaType.APPLICATION_JSON_UTF8);
//        mediaTypes.add(new MediaType("application", "text", StandardCharsets.UTF_8));
//
//        mediaTypes.addAll(jsonConverter.getSupportedMediaTypes());
//        jsonConverter.setSupportedMediaTypes(mediaTypes);
//        return jsonConverter;
//    }
//
//    /**
//     * 解决 返回String 中文乱码
//     */
//    private StringHttpMessageConverter buildStringHttpMessageConverter(StringHttpMessageConverter stringConverter) {
//        stringConverter.setDefaultCharset(StandardCharsets.UTF_8);
//        List<MediaType> mediaTypes = new ArrayList<>();
//        mediaTypes.add(new MediaType("text", "html", StandardCharsets.UTF_8));
//
//        mediaTypes.addAll(stringConverter.getSupportedMediaTypes());
//        stringConverter.setSupportedMediaTypes(mediaTypes);
//        return stringConverter;
//    }
//
//}